package com.own.component.common.base.service.item;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.own.component.common.base.entity.BaseBo;
import com.own.component.common.base.entity.po.BaseBean;
import com.own.component.common.base.entity.vo.BaseBeanVo;
import com.own.component.common.model.UpdateModel;

import java.util.List;

/**
 * BaseUpdateService
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public interface BaseUpdateService<
        PO extends BaseBean,
        BO extends BaseBo<PO>,
        VO extends BaseBeanVo<PO>
        > {

    /**
     * 修改信息
     *
     * @param po 修改对象
     * @return 修改标识
     */
    default UpdateModel<VO> update(PO po) {
        return new UpdateModel<>(false);
    }

    /**
     * 修改信息
     *
     * @param pk 主键id
     * @param bo 修改对象
     * @return 修改标识
     */
    default UpdateModel<VO> update(Long pk, BO bo) {
        return new UpdateModel<>(false);
    }

    /**
     * 修改信息
     *
     * @param keyExtractor 字段信息
     * @param fk           外键id
     * @param bo           修改对象
     * @param <R>          类型
     * @return 修改标识
     */
    default <R> UpdateModel<VO> update(SFunction<PO, R> keyExtractor, Long fk, BO bo) {
        return new UpdateModel<>(false);
    }

    /**
     * 批量修改信息
     *
     * @param poList 修改对象列表
     * @return 修改标识
     */
    default UpdateModel<VO> updatePoBatch(List<PO> poList) {
        return new UpdateModel<>(false);
    }

    /**
     * 批量修改信息
     *
     * @param poList 修改对象列表
     * @return 修改标识
     */
    default UpdateModel<VO> updateBatch(List<BO> poList) {
        return new UpdateModel<>(false);
    }

}
